import AsyncStorage from '@react-native-async-storage/async-storage';

/**
 * **从本地存储中获取指定字段的值**
 * @param {string} fieldName 需要获取的本地存储数据的字段名
 * @param {boolean} needParse 是否需要对获取到的数据进行JSON解析，默认true
 * @returns {any}
 */
export const getStoragedData = async (fieldName, needParse = true) => {
  try {
    const jsonValue = await AsyncStorage.getItem(fieldName);
    return !needParse ? jsonValue : JSON.parse(jsonValue);
  } catch (error) {
    console.log(error);
  }
};

/**
 * **设置本地存储中指定字段的值**
 * @param {string} fieldName 需要设置的本地存储数据的字段名
 * @param {any} fieldValue 需要设置的本地存储数据的字段值
 * @param {boolean} needStringify 是否需要对存储的数据进行JSON字符串化，默认为true
 */
export const setStoragedData = async (
  fieldName,
  fieldValue,
  needStringify = true,
) => {
  try {
    await AsyncStorage.setItem(
      fieldName,
      needStringify ? JSON.stringify(fieldValue) : fieldValue,
    );
  } catch (e) {
    console.error(e);
  }
};

/**
 * **删除本地存储中指定字段的值**
 * @param {string} fieldName 需要设置的本地存储数据的字段名
 */
export const removeStoragedData = async fieldName => {
  try {
    return await AsyncStorage.removeItem(fieldName);
  } catch (e) {
    console.error(e);
  }
};

/**
 * **更新本地存储中指定字段的值**
 * @param {string} fieldName 需要设置的本地存储数据的字段名
 * @param {any} fieldValue 需要设置的本地存储数据的字段值
 * @param {boolean} needStringify 是否需要对存储的数据进行JSON字符串化，默认为true
 */
export const mergeStoragedData = async (
  fieldName,
  fieldValue,
  needStringify = true,
) => {
  try {
    await AsyncStorage.mergeItem(
      fieldName,
      needStringify ? JSON.stringify(fieldValue) : fieldValue,
    );

    return getStoragedData(fieldName);
  } catch (e) {
    console.error(e);
  }
};
